#ifndef XMUX_H
#define XMUX_H

#include "xformat.h"

class XMux : public XFormat {
public:
  ////////////////////////////////////////
  /// 打开一个解封装上下文，会生成两个流，0下标下是视频流，1下标下是音频流
  /// \brief Open 打开文件或网络流
  /// \param url 文件或网络流
  /// \return 失败放回nullptr
  static AVFormatContext *Open(const char *url,
                               AVCodecParameters *video_para = nullptr,
                               AVCodecParameters *audio_para = nullptr);
  // 写入头
  bool WriteHeader();
  // 写入数据
  bool Write(AVPacket *pkt);
  // 写入缓冲和结尾
  bool WriteEnd();
  //
  void set_src_video_time_base(AVRational *tb);
  void set_src_audio_time_base(AVRational *tb);
  ~XMux();

private:
  AVRational *src_video_time_base_ = nullptr;
  AVRational *src_audio_time_base_ = nullptr;
  long long begin_video_pts_ = -1;// 原视频开始时间
  long long begin_audio_pts_ = -1;// 原音频开始时间
};

#endif // XMUX_H
